Specifies the default visibility for global symbols or the visibility for symbols in a file.
Windows: None
Linux: Data > Default Symbol Visibility
Mac OS: Data > Default Symbol Visibility
IA-32, IntelŪ EM64T, IntelŪ ItaniumŪ architecture
Linux and Mac OS: | -fvisibility=keyword -fvisibility-keyword=file |
Windows: | None |
keyword | Specifies the visibility setting. Possible values are: | |
default | Sets visibility to default. | |
extern | Sets visibility to extern. | |
hidden | Sets visibility to hidden. | |
internal | Sets visibility to internal. | |
protected | Sets visibility to protected. |
file | Is the pathname of a file containing the list of symbols whose visibility you want to set. The symbols must be separated by whitespace (spaces, tabs, or newlines). |
-fvisibility=default | The compiler sets visibility of symbols to default. |
This option specifies the default visibility for global symbols (syntax -fvisibility=keyword) or the visibility for symbols in a file (syntax -fvisibility-keyword=file). For symbols specified in file, the second syntax form overrides the first.
Note
These two ways to explicitly set visibility are mutually exclusive. You may set visibility in the declaration, or specify the symbol name in a file, but not both.
Option | Description |
---|---|
-fvisibility=default -fvisibility-default=file |
Sets visibility of symbols to default. This means other components can reference the symbol, and the symbol definition can be overridden (preempted) by a definition of the same name in another component. |
-fvisibility=extern -fvisibility-extern=file |
Sets visibility of symbols to extern. This means the symbol is treated as though it is defined in another component. It also means that the symbol can be overridden by a definition of the same name in another component. |
-fvisibility=hidden -fvisibility-hidden=file |
Sets visibility of symbols to hidden. This means that other components cannot directly reference the symbol. However, its address may be passed to other components indirectly. |
-fvisibility=internal -fvisibility-internal=file |
Sets visibility of symbols to internal. This means the symbol cannot be referenced outside its defining component, either directly or indirectly. |
-fvisibility=protected -fvisibility-protected=file |
Sets visibility of symbols to protected. This means other components can reference the symbol, but it cannot be overridden by a definition of the same name in another component. |
If an -fvisibility option is specified more than once on the command line, the last specification takes precedence over any others.
If a symbol appears in more than one visibility file, the setting with the least visibility takes precedence.
The following shows the precedence of the visibility settings (from greatest to least visibility):
Note that extern visibility only applies to functions. If a variable symbol is specified as extern, it is assumed to be default.
None
A file named prot.txt contains symbols a, b, c, d, and e. Consider the following:
-fvisibility-protected=prot.txt
This option sets protected visibility for all the symbols in the file. It has the same effect as specifying fvisibility=protected in the declaration for each of the symbols.
Optimizing Applications: Symbol Visibility Attribute Options (Linux* and Mac OS*)